﻿// Decompiled with JetBrains decompiler
// Type: BUTR.DependencyInjection.IGenericServiceContainer
// Assembly: MCMv5, Version=5.10.2.0, Culture=neutral, PublicKeyToken=null
// MVID: 7AB326B9-B2B4-41C2-9177-68E944071101
// Assembly location: D:\steam\steamapps\workshop\content\261550\2859238197\bin\Win64_Shipping_Client\MCMv5.dll

using System;

#nullable enable
namespace BUTR.DependencyInjection
{
  public interface IGenericServiceContainer
  {
    IGenericServiceContainer RegisterSingleton<TService>() where TService : class;

    IGenericServiceContainer RegisterSingleton<TService>(
      Func<IGenericServiceFactory, TService> factory)
      where TService : class;

    IGenericServiceContainer RegisterSingleton<TService, TImplementation>()
      where TService : class
      where TImplementation : class, TService;

    IGenericServiceContainer RegisterSingleton<TService, TImplementation>(
      Func<IGenericServiceFactory, TImplementation> factory)
      where TService : class
      where TImplementation : class, TService;

    IGenericServiceContainer RegisterSingleton(Type serviceType, Type implementationType);

    IGenericServiceContainer RegisterSingleton(Type serviceType, Func<object> factory);

    IGenericServiceContainer RegisterScoped<TService>() where TService : class;

    IGenericServiceContainer RegisterScoped<TService>(Func<IGenericServiceFactory, TService> factory) where TService : class;

    IGenericServiceContainer RegisterScoped<TService, TImplementation>()
      where TService : class
      where TImplementation : class, TService;

    IGenericServiceContainer RegisterScoped<TService, TImplementation>(
      Func<IGenericServiceFactory, TImplementation> factory)
      where TService : class
      where TImplementation : class, TService;

    IGenericServiceContainer RegisterScoped(Type serviceType, Type implementationType);

    IGenericServiceContainer RegisterScoped(Type serviceType, Func<object> factory);

    IGenericServiceContainer RegisterTransient<TService>() where TService : class;

    IGenericServiceContainer RegisterTransient<TService>(
      Func<IGenericServiceFactory, TService> factory)
      where TService : class;

    IGenericServiceContainer RegisterTransient<TService, TImplementation>()
      where TService : class
      where TImplementation : class, TService;

    IGenericServiceContainer RegisterTransient<TService, TImplementation>(
      Func<IGenericServiceFactory, TImplementation> factory)
      where TService : class
      where TImplementation : class, TService;

    IGenericServiceContainer RegisterTransient(Type serviceType, Type implementationType);

    IGenericServiceContainer RegisterTransient(Type serviceType, Func<object> factory);

    IGenericServiceProvider Build();
  }
}
